DOM을 여러 부모에 appendChild할 때의 문제점

✒️ 2025-05-23 17:06 내용 수정


참고 자료 : stackoverflow why-does-appendchild-moves-a-node, mdn web docs cloneNode, mdn web docs DOM, mdn web docs appendChild

문제 상황

<section id="primary">
	<div class="related-box"></div>
</section>

<!-- 중략 -->

<aside id="secondary">
	<div class="related-box"></div>
</aside>
temp_div.innerHTML = data;

// 템플릿
const template = temp_div.querySelector("#scroll-menu").content;

// 스크롤 메뉴 전체 박스
const scroll_wrap = template.querySelector(".scroll-menu-wrap");

// video.html에서 메뉴 목록을 넣을 위치
// 2개의 요소가 들어온다.
const target = document.querySelectorAll(".related-container");

// 템플릿에서 목록 아이템을 넣을 위치
const menu_list = scroll_wrap.querySelector(".menu-list");

video_menu.forEach(el => {
    // 리스트 아이템
    const item = document.createElement("li");
    // 버튼 태그
    const item_btn =  document.createElement("button");
    item_btn.textContent = el.name_ko;
    item.classList.add("menu-item-btn");
    item.appendChild(item_btn);               

    menu_list.appendChild(item);
});

// need fix : 첫 번째에만 들어가는 문제 발생
target.forEach(el=>{
    el.prepend(scroll_wrap)
});

원인 분석 및 해결 방법

// 여러 개 넣을 요소를 복제해서 추가한다.
target.forEach(el=>{
    el.prepend(clone.cloneNode(true));
});